<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        const data = [1, 2, [1, [2, 3, [4, 5, [6]]]]];
        function flatter(arr) {
            if (!arr.length) return;
            return arr.reduce(
                (pre, cur) =>
                    {
                        console.log(`JSON.stringify(pre)`,JSON.stringify(pre));
                        console.log(`JSON.stringify(cur)`,JSON.stringify(cur));
                        return Array.isArray(cur) ? [...pre, ...flatter(cur)] : [...pre, cur]
                    },
                []
            );
        }
        /**
         * 递归的思路很容易想到，核心思想也是一样，
         * 通过三目运算符控制结果走向，如果发现有数组元素(Array.isArray(cur)),
         * 就将之前的结果(pre)和数组元素拍平的结果(flatter(cur))展开合并到新数组([...pre, ...flatter(cur)]);
         * 如果没有数组元素，那么直接将之前的结果和这次的元素合并成新数组([...pre, cur])
        */
       
        const res=flatter(data);
        console.log(res);


    </script>
</body>

</html>